#pragma once

#include <AVUIVisual3D.h>

namespace AVUI {

class UIElement3D : public Visual3D, public IInputElement
{
    friend class FocusManager;
    friend class UIElementHelper;
public:
    DECLARE_ELEMENT(UIElement3D, Visual3D);

    void AddHandler(RoutedEvent* pRoutedEvent, Delegate* pEventHandler) { };
    void RemoveHandler(RoutedEvent* pRoutedEvent, Delegate* pEventHandler) { };
    void RaiseEvent(RoutedEventArgs* pArgs) { };
    void AddToEventRoute(EventRoute* pRoute, RoutedEventArgs* e) { };

    virtual bool Focus() AVUI_OVERRIDE { return false; }
    virtual Object* get_Object() AVUI_OVERRIDE { return this; }
    virtual bool get_IsKeyboardFocusWithin() AVUI_OVERRIDE { return false; }

    bool get_IsEnabled() { return true; }

    DependencyObject* GetUIParent(bool continuePastVisualTree) { return NULL; }
    virtual bool BuildRouteCore(EventRoute* pRoute, RoutedEventArgs* pArgs) { return false; }
    virtual TRefCountedPtr<Object> AdjustEventSource(RoutedEventArgs* pArgs) { return NULL; }
 

protected:
    virtual DependencyObject* GetUIParentCore() { return NULL; }

private:

};


}; // namespace AVUI
